package main

import "fmt"

func ff11() int {
	x := 5
	defer func() {
		x++
	}()
	return x
}

func ff2() (x int) {
	defer func() {
		x++
	}()
	return 5
}

func ff3() (y int) {
	x := 5
	defer func() {
		x++
	}()
	return x
}
func ff4() (x int) {
	defer func(x int) {
		x++
	}(x)
	return 5
}
func main() {
	/*
		defer的执行时机：
			函数中return语句底层实现：
							返回值 = x
				return x ➪		↓
							 RET指令

			defer语句执行的时机：
							返回值 = x
								↓
				return x ➪ 运行defer
								↓
							 RET指令
	*/
	fmt.Println(ff11())
	fmt.Println(ff2())
	fmt.Println(ff3())
	fmt.Println(ff4())
	/*结果：
	5
	6
	5
	5
	*/
}
